package com.liwbn.rbac.core.generic;


/**
 * 所有自定义Service的顶级接口,封装常用的增删查改操作
 * <p/>
 * Model : 代表数据库中的表 映射的Java对象类型 PK :代表对象的主键类型
 * 
 * @author liwb 2015年9月25日 下午2:18:07
 */
public interface GenericService<Model, PK> {

    /**
     * 插入对象(所有属性)
     * 
     * @param model
     * @return
     */
    Long insert(Model model);

    /**
     * 插入对象(仅存在的属性)
     *
     * @param model
     *            对象
     */
    int insertSelective(Model model);

    /**
     * 根据主键更新对象
     * 
     * @param model
     * @return
     */
    int updateByPrimaryKey(Model model);

    /**
     * 根据主键更新对象
     *
     * @param model
     *            对象
     */
    int updateByPrimaryKeySelective(Model model);

    /**
     * 通过主键, 删除对象
     *
     * @param id
     *            主键
     */
    int deleteByPrimaryKey(PK id);

    /**
     * 通过主键, 查询对象
     *
     * @param id
     *            主键
     * @return
     */
    Model selectByPrimaryKey(PK id);
}
